package com.gec.system.controller;

import com.gec.model.system.ITripUser;
import com.gec.model.vo.LoginVo;
import com.gec.system.common.Result;
import com.gec.system.exception.MyCustomerException;
import com.gec.system.service.ITripUserService;
import com.gec.system.util.JwtHelper;
import com.gec.system.util.MD5Helper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;


@RestController
@Api(tags = "登录管理")
@RequestMapping( "/system/index")
public class LoginController {
    @Autowired
    private ITripUserService iTripUserService;


//     登录接口-----不使用这个方法
    @ApiOperation("登录方法")
    @PostMapping("/login")
    public Result login(@RequestBody LoginVo loginVo)
    {
        System.out.println("进入登录方法login");
        //1.根据username 查询数据
        ITripUser iTripUser =  this.iTripUserService.getUserInfoUserName(loginVo.getUsername());

        //2.如果查询为空 给出提示
        if (iTripUser==null){
            throw  new MyCustomerException(20001,"用户不存在..");
        }

        //3.比较密码  （使用用户输入的密码和数据库密码比较）
        String password = loginVo.getPassword();
        String passwordwithMD5 = MD5Helper.encrypt(password);

        if (!iTripUser.getPassword().equals(passwordwithMD5)){
            throw new MyCustomerException(20001,"密码不正确");
        }


        //4.判断用户是否可用
        if (iTripUser.getActivated().intValue()==0){
            throw new MyCustomerException(20001,"账号被停用..");
        }
        //5.根据userid和username 生成token字符串 再通过map返回
        //5.根据用户userid和username去生成token，再通过map封装后返回
        String token = JwtHelper.createToken(iTripUser.getId()+"", iTripUser.getUsername());
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("token", token);

        return Result.ok(map);
    }

    @ApiOperation("info方法")
    @GetMapping("/info")
    public Result info(HttpServletRequest request)
    {
        //a.获取请求头的 token 字符串
        String token = request.getHeader("token");
        System.out.println("info---请求头中的token: "+token);

        //b.从token 字符串获取用户名称 (id)
        String username = JwtHelper.getUsername(token);
        System.out.println("info----username: "+username);
        // c.根据用户名称获取用户信息 （a.基本信息  b.菜单权限信息  和 c.按钮权限信息）
        Map<String,Object> map =  iTripUserService.getUserInfo(username);

        return Result.ok(map);
    }


//
//    /**
//     *  登录接口
//     * @return
//     */
//    @PostMapping(value = "/login")
//    public Result login()
//    {
//        Map<String,Object> map = new HashMap<String, Object>();
//        map.put("token","admin-token");
//        // 注意此处状态码还需要处理的，我们返回的是200，人家这里是20000
//        return Result.ok(map);
//    }
//    /**
//     *  获取用户信息
//     */
//    @GetMapping(value = "/info")
//    public Result info()
//    {
//        Map<String,Object> map = new HashMap<>();
//        map.put("roles","[admin]");
//        map.put("introduction","I am a super admin");
//        map.put("avatar","https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
//        map.put("name","admin dafei hello!");
//        return Result.ok(map);
//    }
    /**
     * 退出
     * @return
     */
    @PostMapping("/logout")
    public Result logout(){
        return Result.ok();
    }
}
